package com.tyam.managedBean;

import java.io.IOException;
import java.io.Serializable;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;

import org.primefaces.event.CloseEvent;

import com.tyam.bean.Contribuinte;
import com.tyam.bean.Endereco;
import com.tyam.bean.Telefone;
import com.tyam.dao.DAOFactory;
import com.tyam.util.Listas;
import com.tyam.validador.GeraMensagem;
import com.tyam.validador.ValidadorFactory;
import com.tyam.validador.Validar;

@ManagedBean
@SessionScoped
public class ControleContribuinte implements Serializable{

	private static final long serialVersionUID = -3888909167925585290L;
	private Contribuinte contribuinte;
	private String mensagem;
	private List<Contribuinte> lista;
	private String textoPesquisa = "";
	private String cpfCnpjPesquisa = "";
	private String retorno = "cadastro";
	private List<String> UFS;
	
	public ControleContribuinte(){
		
	}

	public void create(){
		contribuinte = new Contribuinte();
		Endereco endereco = new Endereco();
		contribuinte.setEndereco(endereco);
		Telefone telefone = new Telefone();
		contribuinte.setTelefone(telefone);
	}

	public Contribuinte getContribuinte() {
		if (contribuinte == null){
			create();
		}
		return contribuinte;
	}

	public void setContribuinte(Contribuinte contribuinte) {
		this.contribuinte = contribuinte;
	}

	public String alterar(){
		return "cadastro";
	}

	public String adicionar(){
		create();
		return "cadastro";
	}

	public void pesquisar(){
		setLista(DAOFactory.getContribuinteDAO().getSelecionar(cpfCnpjPesquisa  ,textoPesquisa));
	}

	public String gravar(){
		
		Validar validador = ValidadorFactory.getValidador();
		validador.validar(contribuinte);
		String[] mensagens = validador.getMensagensValidacao();
		mensagem = GeraMensagem.getMensagem(mensagens);
	
		retorno = "manutencao"; 
		setMensagem(mensagem);	
		if (validador.isOk() && mensagem.isEmpty() ){		
 			if (getContribuinte().getCodigoContribuinte() == 0){
				try {
					
					DAOFactory.getContribuinteDAO().inserir(contribuinte);
					setMensagem("Cadastro com Sucesso");
					retorno = "manutencao";
					limpar();
				} catch (Exception e) {
					setMensagem("erro: "+e.getMessage());
					retorno = "cadastro";
				}
				
			}else{
				try {
					DAOFactory.getContribuinteDAO().alterar(contribuinte);
					setMensagem("Alterado com Sucesso");
					retorno = "manutencao";
					limpar();
				} catch (Exception e) {
					setMensagem("erro: "+e.getMessage());
					retorno = "cadastro";
				}
			}
 			
			pesquisar();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,getMensagem(), ""));
			
		}else{
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,getMensagem(), ""));
			retorno = "cadastro";
		}
		return retorno;
	}

	public void excluir(){
		try {
			DAOFactory.getContribuinteDAO().excluir(contribuinte);
		} catch (Exception e) {
			setMensagem(e.getMessage());
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,getMensagem(), ""));
			
		}
		pesquisar();
	}

	public void limpar(){
		contribuinte = null;
	}

	public String getMensagem() {
		return mensagem;
	}

	public void setMensagem(String mensagem) {
		this.mensagem = mensagem;
	}

	public List<Contribuinte> getLista() {
		return lista;
	}

	public void setLista(List<Contribuinte> lista) {
		this.lista = lista;
	}


	public String getTextoPesquisa() {
		return textoPesquisa;
	}

	public void setTextoPesquisa(String textoPesquisa) {
		this.textoPesquisa = textoPesquisa;
	}

	public String getRetorno() {
		return retorno;
	}

	public void setRetorno(String retorno) {
		this.retorno = retorno;
	}

	public void retorna(CloseEvent event) throws IOException {   
		FacesContext faces = FacesContext.getCurrentInstance();   
		ExternalContext context = faces.getExternalContext();   
		context.redirect(retorno+".jsf");
	}


	public List<String> getUFS() {
		if (UFS == null){
			UFS = (new Listas()).getEstados();
		}
		return UFS;
	}

	public String getCpfCnpjPesquisa() {
		return cpfCnpjPesquisa;
	}

	public void setCpfCnpjPesquisa(String cpfCnpjPesquisa) {
		this.cpfCnpjPesquisa = cpfCnpjPesquisa;
	}

	public void setUFS(List<String> uFS) {
		UFS = uFS;
	}
}